数学建模

文献查询:

数据查询:


Python图形处理库

一、panda库

import pandas as pd

# 读取xls文件
data = pd.read_excel(r'.\data.xlsx','sheet1')
# 标题行
lst = data.columns
# 数据行
data.loc[row]
# 数据行列(从0开始)
data.iloc[row] # 一行数据
data.iloc[row,col] # 具体数据

# 数据结构
df = pd.DataFrame({'col1':col_1, 'col2':col_2})
# 打开文件写入数据
writer = pd.ExcelWriter('output.xlsx')
# 写入数据
df.to_excel(writer,sheet_name='Sheet1',index=False)
# 保存
writer._save()

二、matlab库

【Matplotlib】add_subplot 和 subplots_adjust

import matplotlib.pyplot as plt

# 直接调用matplotlib.pyplot的画图函数
plt.<matlab_function>

# 画图
plt.show()

# 多图显示
for title in lst[-6:-1]:
fig = plt.figure(title, figsize=(6, 4)).add_subplot(111)
# 创建幕布 图片大小 添加子图
fig.scatter(data['时间'], data[title]) #散点图
fig.set_xlabel('天')
fig.set_ylabel(title)
fig.set_title(title)
plt.show()

# 同图显示双线
x = data['时间']
y = data[lst[idx]]
f = interpolate.interp1d(x,y,kind="linear")
new_y = f(x)
fig = plt.figure(lst[idx], figsize=(20, 20)).add_subplot(111)
fig.plot(x,y,'-or',label='Original')
fig.plot(x,new_y,'-*b',label='Interpolate')
fig.set_xlabel('天')
fig.set_ylabel(lst[idx])
fig.set_title(lst[idx])
plt.legend()
plt.show()

# 中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

MATLAB

official::MATLAB Documentation - MathWorks 中国

云MATLAB


一、软件使用


二、基本语法

%  单行注释
%% 有横线的注释

% 语句尾部带分号会避免结果的输出
% 一条语句执行后会有一个返回值,不想要返回值就在语句后加上分号
;
% 续行
...

1 数据类型

1.1 变量

定义变量

% 定义变量
x = sym('x');
syms x,y,z;

% f(x,y)=3*x^2+4*y^2+1
f = symfun(3*x^2+4*y^2+1,[x,y])

% 特殊变量
% 结果
ans
% π
pi
% 计算机最小数
eps
% 无穷大
inf
% 缺省
NAN
% 虚数单位
i,j

1.2 数字

同pyhton。

1.3 字符和字符串

% 定义字符串(单引号)
s = 'str'

% 字符获得数字
abs(s)
% 数字获得字符
char(num)
% 数字转字符串
num2str(num)
% 字符串长
length(s)

1.4 矩阵

% 定义矩阵(横用空格隔开,竖用分号隔开) matrix = []
mat = [1 2 3;4 5 6;]

% 转置(行变列,列变行)
new_mat = mat'
% 拉成一列(竖着拉)
new_mat = mat(:)
% 方阵求逆
new_mat = inv(mat)
% 单位阵
E = mat * inv(mat)

% 创建步长矩阵(start:step:end),包括end
E = 1:2:9
% 重复矩阵,row重复,col重复
E = repmat(mat,row_rep,col_rep)
% 创建全1矩阵
E = ones(row,col)
% 创建0矩阵(行,列,维度)
E = zeros(row,col,Dimension)

% 选定矩阵,:表示全部
E(3,:)
% 选定指定维度矩阵
E(:,:,2)

% 矩阵加减,对应位置加减
E = A + B
E = A - B
% 矩阵相乘(A行值等于B列值) / 对应位置相乘
E = A * B
E = A .* B
% 矩阵相除(A * B') / 对应位置相除
E = A / B
E = A ./ B
% 左除(A' * B)
E = A \ B
% 矩阵乘幂 / 对应位置幂
E = A ^ B
E = A .^ 3

1.5 元胞数组

类似于python的list

类似列表

% 定义元胞数组 cell = {}
cel = cell(row,col)
% 索引(从1开始)
cel{index}

1.6 结构体

类似于python的dict

类似字典

% 定义结构体
dic = struct(key,value[,key,value,...])
% 取值
dic.key % 取cell
dic.key(n) % 取cell
dic.key{n} % 取value
% 案例
dic = struct('name',{{'a','b'})
dic.name % 'a' 'b'
dic.name(1) % 'a'
dic.name{1} % a

2 逻辑流程

% for循环
for var = start:step:end
...;
...;
end
% step步长不写默认1

% while
while exp
...;
...;
end

% if...else
if exp
...;
else
...;
end

% switch...case
switch num/str
case num/str
...;
case num/str
...;
otherwise
...;
end

3 函数

3.1 数学函数

幂函数:$x^n$。使用:x^n

指数函数:$a^x$,$e^x$。使用:a^x exp(x)

对数函数:$ln x$。使用:log(x)

三角函数:$tan(x)$。使用:tan(x)

反三角函数:$arcsin(x)$。使用:asin(x)

% 求和
sum()
% 求平均值
mean()
% 累加
cumsum()

% 解方程
solve('exp1','exp2',...,'var1','var2',...)
% sinx + x = 0
solve('sin(x)+x=0')
solve('sin(X)+x')
% 方程组 x^2 + x*y + y = 3;x^2 - 4*x + 3 = 0;
[x,y]=solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')

3.2 随机数

% m行n列(0-1)的随机数,mn和矩阵大小要一致
rand(m,n)
rand(m,n,'double') % 指定精度,参数:'double','single'
rand(RandStream,m,n) % 随机种子
% 标准正态分布的伪随机数(均值0,方差1)
randn(m,n)
% 均匀分布的伪随机整数(指定上限(值包括上限),下限默认0)
randi(iMax)
randi(iMax,m,n)
randi([iMin,iMax],m,n)

3.3 操作函数

神奇的数学—幻方的智慧 - 知乎 (zhihu.com)

% 排序
sortrows()

% 生成n阶单位矩阵
eye(n)
% 生成n阶段幻方
magic(n)

3.4 查找函数

% 读取矩阵行列数
size()
% 读取矩阵维数
length()

% 矩阵查找A中大于num的数,行存入m,列存入n
[m,n] = find(mat > num)

3.5 样式函数

% 美化输出格式(更像数学格式)
pretty(dy)
symdisp(dy)

4 文件

% 读excel
xlsread(file,sheet,range)
A = xlsread('data.xls','附件1','A4:E322')
% 写excel
xlswrite()
% 读图片
imread()

5 matlab命令

5.1 屏幕命令

% 清屏
clc
% 清内存
clear

5.2 数学命令

% 内置命令
% 求导,偏导(n:阶)
diff(f,x,n)
% 定积分,重积分
int()
% 泰勒展开
taylor()
% 常微分方程
dsolve()

三、绘图

1 二维绘图

% 建立一个幕布
figure

% 普通画图
plot(x,y)

% 标题
title('str')
% x轴名,y轴名
xlabel('str')/ylabel('str')
% 限制x轴范围
xlim([start end])

% 设置案例
% 共用一个x在y上有不同取值
[AX,H1,H2] = plotyy(x,y1,x,y2)
% 设置属性
set(get(AX(1),'Ylabel'),'String','Slow Decay')
set(get(AX(2),'Ylabel'),'String','Fast Decay')
set(H1,'LineStyle','--')
set(H1,'LineStyle',':')

% 散点图
scatter(x,y)
% 同一张图中画多条线(标签区分)
legend()

线与点参数

颜色

点与线

2 三维绘图

% 三维画图
plot3(x,y,z)

% z标签
zlable('str')

% 等待后再绘制
hold on/off
% 网格线
grid on/off
% 背景轴立方化
axis square

模型算法

一、数据处理

SPSSPRO

利用python对一份AQI数据进行分析与预测

1 缺失值

比赛提供的数据,发现有些单元格是null或空的。

缺失太多:例如调查人口信息,发现“年龄”这一项缺失了40%,就直接把该项指标删除。

数据缺失值处理方式:

  1. 最简单处理:均值、众数插补

    • 定量数据,例如关于一群人的身高、年龄等数据,用整体的均值来补缺失
    • 定性数据,例如关于一群人的性别、文化程度;某些事件调查的满意度,用出现次数最多的值补缺失
    • 适用赛题人口的数量年龄、经济产业情况等统计数据,对个体精度要求不大的数据
  2. Newton插值法

    • 根据固定公式,构造近似函数,补上缺失值,普遍适用性强
    • 缺点:区间边缘处的不稳定震荡,即龙格现象。不适合对导数有要求的题目
    • 适用赛题:热力学温度、地形测量、定位等只追求函数值精准而不关心变化的数据
  3. 样条插值法

    • 用分段光滑的曲线去插值,光滑意味着曲线不仅连续,还要有连续的曲率
    • 适用赛题零件加工,水库水流量,图像“基线漂移”,机器人轨迹等精度要求高、没有突变的数据

2 异常值

样本中明显和其他数值差异很大的数据,例如一群人的身高数据中有个3米2的

数据异常值处理方式:

  1. 正态分布3σ原则
    • 数值分布在(μ-3σ,μ+3σ)中的概率为99.73%,其中μ为平均值,σ为标准差
    • 求解步骤:1.计算均值μ和标准差σ;2.判断每个数据值是否在(μ-3σ,μ+3σ)内,不在则为异常值
    • 适用题目:总体符合正态分布,例如人口数据、测量误差、生产加工质量、考试成绩等。
    • 不适用题目:总体符合其他分布,例如公交站人数排队论符合泊松分布。*
  2. 画箱型图
    • 箱型图中,把数据从小到大排序。下四分位数𝑄1是排第25%的数值,上四分位数𝑄3是排第75%的数值
    • 四分位距𝐼𝑄𝑅 = 𝑄3- 𝑄1,也就是排名第75%的减去第25%的数值
    • 与正态分布类似,设置个合理区间,在区间外的就是异常值
    • 一般设[𝑄1 − 1.5 ∗ 𝐼𝑄𝑅, 𝑄3 + 1.5 ∗ 𝐼𝑄𝑅]内为正常值
    • 适用题目:普遍适用

异常数据处理方法与缺失值处理相同。

3 处理函数

fillmissing

filloutliers

# 缺失值插补
F = fillmissing(A,method)
# 异常值插补
B = filloutliers(A,fillmethod,findmethod)

二、模型建立

1 线性规划

在一组线性约束条件的限制下,求一线性目标函数的最大或最小值的问题。

例:两个车间生产A、B机床,限制条件不同,求最大利润。

2 整数规划

规定变量部分或全部限制为整数。

全限制为完全整数规划,部分限制为混合整数规划。

3 非线性规划

约束条件或目标函数包含非线性函数。

例:投资决策

4 动态规划

选或不选,得到最佳答案。

例:生产调度,资源分配

5 图与网络

图题

例:最短路径,公路连通。

6 排队论

排队模型。

7 对策论

博弈论。

例:囚徒困境。

8 层次分析法

逐级分析问题。

例:假期旅游(目的地——路上选择——具体措施)

9 插值和拟合

插值:求过已知有限个数据点的近似函数。

拟合:近似函数可以不过数据点,总偏差最小即可。

10 数理统计

大数据分析。

例:学生的身高体重。

11 方差分析

检验两个以上总体的均值彼此是否相等。

例:灯泡的品质。

12 回归分析

拟合的函数是否满足预测要求。

13 微分方程建模

问题中存在需要计算微分的地方。

例:多级火箭问题。

19 神经网络

BP神经网络预测回归MATLAB代码